#include "pipeline.h"

namespace cfg
{
/**
 * @brief 单文件配置提供器
 *
 * 负责根据插件选项中的 "path" 字段，将指定文件纳入构建流程。
 */
class ProviderSingleFile : public IProvider
{
public:
    /**
     * @brief 提供配置文件
     *
     * @param builder      构建器，用于纳入文件
     * @param options      插件选项，必须包含 "path"
     * @param out_errors   输出错误列表
     * @return true  成功纳入文件
     * @return false 缺少必需选项或发生错误
     */
    bool provide(Builder & builder,
                 const PluginOptions & options,
                 std::vector<ConfigError> & out_errors) override
    {
        // 当前实现把部分错误交给 runner 聚合
        if (auto it = options.find("path"); it == options.end())
        {
            // 当缺失必需选项时，写出明确的诊断，帮助用户定位问题
            ConfigError e{
                .code = Errc::Other, .message = "single_file: missing option 'path'", .path = {}};
            e.notes = std::string("plugin option required");
            out_errors.emplace_back(std::move(e));
            return false;
        }
        else
        {
            builder.include_file(it->second);
            return true;
        }
    }
};

// 静态注册内置 provider
REGISTER_PROVIDER("single_file", ProviderSingleFile);

} // namespace cfg
